package edzest.basic;

import java.util.Scanner;

public class J20_BookDBMain {

	// 서비스 클래스, 키보드입력 클래스는
	// 객체 생성없이 바로 사용할 수 있도록
	// static 으로 선언
	private static J20_BookDBDAO srv = new J20_BookDBDAO();
	// 같은 패키지에 있는 클래스라 임포트안함
	private static Scanner sc = new Scanner(System.in);
	// 다른 패키지에 있는 클래스라 임포트함
	
	private static final String TITLE = 
			"-= BookDB 프로그램  =-";
	private static final String MENU = 
			"1)추가 2)전체조회 3)상세조회 4)수정 5)삭제 0)종료";
	private static final String ADDMSG = 
			"제목, 출판사, 저자 순으로 입력";
	private static final String VIEWMSG = 
			"상세 조회할 책 번호를 입력";
	private static final String UPDMSG = 
			"수정할 책 번호를 입력";
	private static final String DELMSG = 
			"삭제할 책 번호를 입력";
	
	public static void main(String[] args) {
		
		System.out.println(TITLE);
		while(true){
			System.out.println(MENU);
			switch(sc.nextInt()){
				case 1: newBookDB(); break;
				case 2: readBookDB(); break;
				case 3: readOneBookDB(); break;
				case 4: modifyBookDB(); break;
				case 5: removeBookDB(); break;
				case 0: sc.close(); 
						System.exit(0);
						break;
			}
		}
	}
	
	// Main 클래스에서 DAO클래스의 메서드를 
	// 직접 호출하는 것은 OOP개념에 다소 위배
	// 캡슐화와 보안, 유지보수 관점에서 볼때
	// 서비스 객체를 하나 더 만들어
	// 그것을 통해 DAO클래스의 메서드를 
	// 호출하는 것이 더 나음
	
	// 즉, Main -> DAO 보다는(지금은 이렇게 하고)
	// Main -> service -> DAO 가 나음(나중에 이렇게 할거)
	// 지금은 이렇게 안하고 나중에 스프링가서 이렇게 설계
	
	// DAO클래스의 메서드를 호출하는
	// 서비스 메서드를 static으로 선언
	private static void newBookDB(){
		System.out.println( ADDMSG );
		J20_BookDBVO bvo = new J20_BookDBVO(sc.next(), sc.next(), sc.next());
		int cnt = srv.insertBookDB( bvo ); // 성적에서 DAO에 있던 코드. DAO에 부담덜기 위해 여기에 작성
		if(cnt>0) System.out.println("추가성공!");
	}
	private static void readBookDB(){
		System.out.println( srv.selectBookDB() );
	}
	private static void readOneBookDB(){
		System.out.println( srv.selectBookDB() ); // 전체를 먼저 보여주기
		System.out.println( VIEWMSG );
		String id = sc.next();
		System.out.println( srv.selectBookDB( id ) ); // 상세조회 출력
	}
	private static void modifyBookDB(){
		System.out.println( srv.selectBookDB() ); // 전체를 먼저 보여주기
		System.out.println( UPDMSG );
		String id = sc.next(); // id입력
		System.out.println( ADDMSG );
		J20_BookDBVO bvo = new J20_BookDBVO(sc.next(), sc.next(), sc.next());
		bvo.setId( id ); // id는 생성자에서 안받으니 setter로 받음
		// 4개의 ?를 이렇게 받음
		
		if( srv.updateBookDB( bvo ) > 0)
			System.out.println("수정완료!");;
	}
	private static void removeBookDB(){
		System.out.println( srv.selectBookDB() );
		System.out.println( DELMSG );
		String id = sc.next();
		if(srv.deleteBookDB(id)>0)
			System.out.println("삭제완료!");
	}

}
